package com.xayy.health.mgt.service;

import cn.kawins.base.result.CheckResult;
import com.xayy.health.mgt.model.ModelTrain;
import com.xayy.health.mgt.model.TaskChildInfo;
import com.xayy.health.mgt.model.TaskInfo;
import com.xayy.health.mgt.model.TelemetryData;
import com.xayy.health.mgt.model.dto.CaseOneDTO;
import com.xayy.health.mgt.model.dto.DataFeatureDto;
import com.xayy.health.mgt.model.dto.TelemetryDto;
import com.xayy.health.mgt.model.vo.FailureInfoVo;
import com.xayy.health.mgt.model.vo.TaskFaultPredictDataVo;
import com.xayy.health.mgt.model.vo.TaskResultVo;

import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;

/**
 * @author zhangxa
 */
public interface DiagnoseService {

    /**
     * 模型训练
     *
     * @param modelTrain 模型训练入参
     * @param recordId   入参
     * @return 结果日志
     */
    CheckResult<Object> modelTrial(ModelTrain modelTrain, Long recordId) throws UnknownHostException;


    /**
     * 查询使用后的测遥数据(自动运行或者模型训练使用后的)
     * @param tableName 表名称
     * @param telemetryDto 查询条件
     * @return 遥测信息集合
     */
    Map<String, List<TelemetryData>> selectUsedTelemetryData(String tableName,TelemetryDto telemetryDto);

    /**
     * 查询遥测数据（预处理后）
     *
     * @param telemetryDto 入参信
     * @return 遥测信息集合
     */
    Map<String, List<TelemetryData>> selectTelemetryData(TelemetryDto telemetryDto);

    /**
     * 获取预测数据
     *
     * @param telemetryDto 入参信息
     * @return 获取预测数据列表
     */
    List<TelemetryData> selectTelemetryDataByTimeRange(TelemetryDto telemetryDto);

    /**
     * 按时间段查询遥测数据
     * @param dataFeatureDto 入参信息
     * @return 结果日志
     */
    List<TelemetryData> getYcListByTimeRange(DataFeatureDto dataFeatureDto);

    /**
     * 查询预处理平滑数据
     * @param telemetryDto 入参
     * @return 遥测信息集合
     */
    Map<String, List<TelemetryData>> selectPrePhData(TelemetryDto telemetryDto);

    /**
     * 启动模型
     *
     * @param modelTrain 调用模型入参信息
     * @return 结果日志
     */
    CheckResult<?> startModel(ModelTrain modelTrain) throws UnknownHostException;

    /**
     * 异步线程池执行任务
     *
     * @param taskChildInfo 任务信息
     * @param taskInfo      入参
     * @param caseOneDTO    入参
     */
    void asyncExcuteTask(TaskChildInfo taskChildInfo, TaskInfo taskInfo, CaseOneDTO caseOneDTO) throws UnknownHostException;

    /**
     * 获取子任务异常点集合
     *
     * @param taskId 任务id
     * @return 结果日志
     */
    List<TaskResultVo> getTaskFaultDataList(Long taskId);

    /**
     * 事后诊断模型训练多短故障数据获取
     *
     * @param failureInfoVo 故障信息入参
     * @return CheckResult<Object>
     */
    CheckResult<Object> failureInfos(FailureInfoVo failureInfoVo);


    /**
     * 多参数算法名称列表
     *
     * @param type 类型
     * @return ArrayList<Map < String, String>>
     */
    CheckResult<Object> getAlgorithmNameList(Integer type);


    /**
     * 事后诊断自动运行查看子任务数据(单参)
     *
     * @param taskFaultPredictDataVo 故障预测数据入参
     * @return CheckResult<?>
     */
    CheckResult<?> getTaskFaultPredictDataList(TaskFaultPredictDataVo taskFaultPredictDataVo);

    /**
     * 事后诊断自动运行查看子任务数据(分页)
     *
     * @param taskFaultPredictDataVo 故障预测数据入参
     * @return Object
     */
    Object getTaskFaultPredictPageList(TaskFaultPredictDataVo taskFaultPredictDataVo);

    /**
     * 补充缺失数据
     * @param list 待补充集合
     * @return 补充完的集合
     */
//    Map<String, List<TelemetryData>> addDataToListMap(Map<String, List<TelemetryData>> list);
}
